SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS OFF
GO

-- 06/11/2008 Agregué BAJA = 'N' para que no muestre los cerrados
CREATE PROCEDURE [dbo].[paLiquidadorDeHaberes] 
	@CabeceraDeLiquidacion INT
AS
SET NOCOUNT ON

DECLARE @FechaDesde DATETIME
DECLARE @FechaHasta DATETIME
DECLARE @FechaDesdeSuplentes DATETIME
DECLARE @FechaHastaSuplentes DATETIME
DECLARE @Mes INT
DECLARE @Anio INT
DECLARE @Tipo INT
DECLARE @Error INT
DECLARE @ErrorX INT
DECLARE @NombreDelMes VARCHAR(20)
DECLARE @idLiquidacion INT
DECLARE @Agente INT
DECLARE @NuevaOrganizacion INT
DECLARE @RegimenLaboral INT
DECLARE @Organizacion INT
DECLARE @idOrganizacion INT 
DECLARE @Cuise INT
DECLARE @MesEstimuloSuplentes INT
DECLARE @AnioEstimuloSuplentes INT 
DECLARE @RegimenLaboralCabecera INT 



SELECT @Error = 0, @ErrorX = 0

-- Actualiza el estado de la cabecera a "EN PROCESO"
UPDATE tb_CabeceraDeLiquidacion SET Estado = 3 WHERE IdCabeceraDeLiquidacion =  @CabeceraDeLiquidacion

-- Se quito por el cambio en la forma de calculo del Salario Familiar - 13/11/2007
-- Asignar Organizacion para Liquidar Asignacion Familiar
--EXEC paAsignarOrganizacionParaSalarioFamiliar @CabeceraDeLiquidacion

-- Obtener Datos de Cabecera de Liquidacion 
SELECT @FechaDesde = Desde, @FechaHasta = Hasta, @Mes = Mes, @Anio = Anio, @Tipo = TipoDeLiquidacion, 
	 @FechaDesdeSuplentes=DesdeSuplente, @FechaHastaSuplentes=HastaSuplente,
	 @RegimenLaboralCabecera=RegimenLaboral
	FROM tb_CabeceraDeLiquidacion 
	WHERE IdCabeceraDeLiquidacion = @CabeceraDeLiquidacion

-- Calcular el Estimulo Privado por Agente     (1=Borrar Registros de  Tb_MontosDeConceptosDelAgente antes del Calculo para el Mes y Año a Liquidar )
EXEC LIQEstimuloPorAgentes @Mes, @Anio, 1, @CabeceraDeLiquidacion, NULL, @FechaDesde, @FechaHasta

-- Calcular el Estimulo Privado solo para Agentes Suplentes (Sit. Revista=4) el procedimiento analiza para borrar
SET @MesEstimuloSuplentes = MONTH(@FechaHastaSuplentes)
SET @AnioEstimuloSuplentes = YEAR(@FechaHastaSuplentes) 
EXEC LIQEstimuloPorAgentes @MesEstimuloSuplentes, @AnioEstimuloSuplentes , 0, @CabeceraDeLiquidacion, 4,  @FechaDesdeSuplentes, @FechaHastaSuplentes

IF NOT EXISTS(SELECT * FROM tb_Liquidaciones WHERE IdCabeceraLiquidacion = @CabeceraDeLiquidacion)
BEGIN
	DECLARE Privadas CURSOR FOR SELECT idOrganizaciones, Cuise FROM tb_Organizaciones WHERE EsPrivada = 'S'  and Baja = 'N' ORDER BY Cuise

	OPEN Privadas

	FETCH NEXT FROM Privadas INTO @idOrganizacion, @Cuise

	WHILE @@FETCH_STATUS = 0
	BEGIN
		IF  @Cuise <> 19807 AND @Cuise <> 31
		BEGIN
			SELECT @NombreDelMes =  DATENAME(MONTH, @FechaDesde)

			INSERT tb_Liquidaciones
			SELECT @Mes, @Anio, @Tipo, CONVERT(VARCHAR, @Cuise) + ' - ' + @NombreDelMes + '  ' + CONVERT(VARCHAR, YEAR(@FechaDesde)), 17, Null, @idOrganizacion, 3, 'S', 'N', @FechaDesde, @FechaHasta, null, null, 0, 0, null, null, 'N', @CabeceraDeLiquidacion 
			-- Si no pudo crear un Registro para cada Organizacion a Liquidar
			SELECT @ErrorX = @@ERROR
			IF @ErrorX <> 0 
				INSERT tb_ErroresLiquidacion SELECT NULL Liquidacion, NULL Agente, @idOrganizacion Organizacion, NULL Servicio, NULL Concepto, GETDATE() Fecha, 'No se pudo cargar la Organizacion para ser  Liquidada' Diagnostico, @CabeceraDeLiquidacion, @ErrorX
		END
		FETCH NEXT FROM Privadas INTO @idOrganizacion, @Cuise
	END

	CLOSE Privadas
	DEALLOCATE Privadas
END


-- PROCESO DE LIQUIDACION DE CADA ORGANIZACION 

	-- Borra los registros de liquidacion incompletos
	DELETE R FROM tb_RegistroDeLiquidaciones R
	INNER JOIN tb_Liquidaciones L ON R.Liquidacion = L.IdLiquidacion
	WHERE IdCabeceraLiquidacion = @CabeceraDeLiquidacion AND LiquidacionCompleta = 'N'

	DECLARE Liquidaciones CURSOR FOR
	SELECT idLiquidacion, RegimenLaboral, Organizacion FROM Tb_Liquidaciones WHERE IdCabeceraLiquidacion = @CabeceraDeLiquidacion AND LiquidacionCompleta = 'N'
	ORDER BY idLiquidacion

	OPEN Liquidaciones

	FETCH NEXT FROM Liquidaciones INTO @idLiquidacion, @RegimenLaboral, @Organizacion

	WHILE @@FETCH_STATUS = 0
	BEGIN
		EXEC spLiquidarEducacionPrivada @RegimenLaboral, NULL, @Organizacion, @Tipo, @idLiquidacion

		-- EJECUTAR CONCEPTOS DE TIPO 2 - Al finalizar La Liquidacion de Cada Organizacion 
		EXEC spLiquidarEducacionPrivadaConceptosTipo2y3 2, @CabeceraDeLiquidacion, @RegimenLaboralCabecera, @idLiquidacion

		FETCH NEXT FROM Liquidaciones INTO @idLiquidacion, @RegimenLaboral, @Organizacion
	END

	CLOSE Liquidaciones 
	DEALLOCATE Liquidaciones

-- FIN PROCESO DE LIQUIDACION DE CADA ORGANIZACION

-- EJECUTAR CONCEPTOS DE TIPO 3 - Al finalizar el PROCESO
EXEC spLiquidarEducacionPrivadaConceptosTipo2y3 3, @CabeceraDeLiquidacion, @RegimenLaboralCabecera, 0

-- FIN DE CONCEPTOS DE TIPO 3

-- Genera Registros en Tb_ValoresDeSubsidios2 para Informe PlanillaDeLiquidacionPorNivel3.rpt
EXEC spGenerarValoresDeLiquidacion3 @Mes, @Anio, @Tipo, @CabeceraDeLiquidacion

-- Actualiza el estado de la cabecera a "TERMINADA A CONFIRMAR"
UPDATE tb_CabeceraDeLiquidacion SET Estado = 4 WHERE IdCabeceraDeLiquidacion =  @CabeceraDeLiquidacion
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
GO
